package com.stt.videoprocess.design.state.impl;

import com.stt.videoprocess.design.model.VideoTask;
import com.stt.videoprocess.design.state.VideoProcessingState;
import lombok.extern.slf4j.Slf4j;

/**
 * 完成状态实现
 * 1. 任务已经完成，不能再进行任何操作
 */
@Slf4j
public class CompletedState implements VideoProcessingState {
    /**
     * 处理视频任务的方法，当任务处于完成状态时调用。
     * 记录日志信息，表明任务已完成。
     *
     * @param task 视频任务对象，包含任务的相关信息
     */
    @Override
    public void handle(VideoTask task) {
        log.info("任务已完成: {}", task.getTaskId());
    }

    /**
     * 尝试从完成状态开始处理视频任务。
     * 抛出异常，因为任务已经完成，无法重新开始处理。
     *
     * @param task 视频任务对象，包含任务的相关信息
     * @return 返回新的处理状态对象（此方法不会返回，直接抛出异常）
     * @throws IllegalStateException 如果尝试从完成状态开始处理，抛出此异常
     */
    @Override
    public VideoProcessingState startProcessing(VideoTask task) {
        throw new IllegalStateException("无法从完成状态开始处理");
    }

    /**
     * 尝试从完成状态暂停视频任务处理。
     * 抛出异常，因为任务已经完成，无法暂停。
     *
     * @param task 视频任务对象，包含任务的相关信息
     * @return 返回新的处理状态对象（此方法不会返回，直接抛出异常）
     * @throws IllegalStateException 如果尝试从完成状态暂停处理，抛出此异常
     */
    @Override
    public VideoProcessingState pauseProcessing(VideoTask task) {
        throw new IllegalStateException("无法从完成状态暂停");
    }

    /**
     * 尝试从完成状态恢复视频任务处理。
     * 抛出异常，因为任务已经完成，无法恢复处理。
     *
     * @param task 视频任务对象，包含任务的相关信息
     * @return 返回新的处理状态对象（此方法不会返回，直接抛出异常）
     * @throws IllegalStateException 如果尝试从完成状态恢复处理，抛出此异常
     */
    @Override
    public VideoProcessingState resumeProcessing(VideoTask task) {
        throw new IllegalStateException("无法从完成状态恢复");
    }

    /**
     * 尝试再次完成视频任务处理。
     * 抛出异常，因为任务已经完成，无需重复完成。
     *
     * @param task 视频任务对象，包含任务的相关信息
     * @return 返回新的处理状态对象（此方法不会返回，直接抛出异常）
     * @throws IllegalStateException 如果任务已经完成，抛出此异常
     */
    @Override
    public VideoProcessingState completeProcessing(VideoTask task) {
        throw new IllegalStateException("任务已处于完成状态");
    }

    /**
     * 尝试将完成状态的任务标记为失败。
     * 抛出异常，因为任务已经完成，无法标记为失败。
     *
     * @param task         视频任务对象，包含任务的相关信息
     * @param errorMessage 错误信息，描述任务失败的原因
     * @return 返回新的处理状态对象（此方法不会返回，直接抛出异常）
     * @throws IllegalStateException 如果尝试将完成状态的任务标记为失败，抛出此异常
     */
    @Override
    public VideoProcessingState failProcessing(VideoTask task, String errorMessage) {
        throw new IllegalStateException("无法从完成状态标记为失败");
    }

}
